
#ifndef _CHUNK_MANAGE_H__
#define _CHUNK_MANAGE_H__

/*
查找用户

@uid: 要查找的元素的ID
@item: 指向返回元素的指针，若为NULL，不返回元素内容。
return：找到，返回其0；未找到，返回负值。
*/
int Chunk_DoFind(RingChunk_T* chunk, uint8_t dir, uint32_t uid, void* item);
int Chunk_Find(RingChunk_T* chunk, uint8_t dir, uint32_t uid, void* item);
/*-----------------------------------------*/
/*
修改元素
@index: 元素索引
@item: 新的元素的指针

return: 成功修改返回0，否则返回负数
*/
int Chunk_DoModify(RingChunk_T* chunk, uint32_t index, void* item);

/*
设置元素

@item: 新的元素的指针

return: 成功修改返回0，否则返回负数
*/
int Chunk_DoSet(RingChunk_T* chunk, void* item);
int Chunk_Set(RingChunk_T* chunk, void* item);

/*-----------------------------------------*/

/*
在head添加元素

@item：添加的元素的指针

return: 成功修改返回0，否则返回负数

*/
int Chunk_DoAdd(RingChunk_T* chunk, uint8_t unique, void* item);
int Chunk_Add(RingChunk_T* chunk, uint8_t unique, void* item);

/*-----------------------------------------*/
/*
删除元素

@uid：要删除的元素的ID，uid = 0，删除游标指向的元素

return: 成功删除返回0，否则返回负数

*/
int Chunk_Remove(RingChunk_T* chunk, uint32_t uid);
/*-----------------------------------------*/
/*
从游标当前位置读元素，然后移动游标

@item: 指向返回元素的指针。

return: 成功返回元素大小，否则返回负数

*/
int Chunk_DoRead(RingChunk_T* chunk, uint8_t dir, void* item);
int Chunk_Read(RingChunk_T* chunk, uint8_t dir, void* item);
/*-----------------------------------------*/
/*
修改游标指向
@offset：游标偏移量
@flag：
		R_SEEK_START：offset为相对起始位置的偏移
		R_SEEK_END：offset为相对末尾位置的偏移
		R_SEEK_CUR：offset为相对当前位置的偏移 
return：修改前游标相对起始位置的偏移量
*/
uint32_t Chunk_Seek(RingChunk_T* chunk, uint32_t offset, uint8_t flag);
/*
清除已删除元素
*/
void Chunk_DoClean(RingChunk_T* chunk);
void Chunk_Clean(RingChunk_T* chunk);

/*
删除所有元素
*/
int Chunk_Clear(RingChunk_T* chunk);


/*
初始化用户信息记录
*/
void Chunk_Init(RingChunk_T* chunk, uint32_t infoSec, uint32_t infoSecNum,
	uint32_t dataSec, uint32_t dataSecNum, uint8_t itemSize, uint32_t maxSize);


#endif

